package compraventa.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import compraventa.excepcion.DAOExcepcion;
import compraventa.modelo.Categoria;
import compraventa.util.ConexionMyBD;

public class CategoriaDAO extends BaseDAO {
	public Categoria insertar(Categoria cat) throws DAOExcepcion {
		String query = "insert into categoria(nomcategoria,descategoria,categoria_idcategoria,admCat_idpersona) " +
				"values (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionMyBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, cat.getNombre());
			stmt.setString(2, cat.getDescripcion());
			stmt.setInt(3, cat.getCategoria_idcategoria());
			stmt.setInt(4, cat.getAdmCat_idpersona());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			//per.setIdPersona(id);
			cat.setIdCategoria(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return cat;
	}

	public Categoria obtener(int idCategoria) throws DAOExcepcion {
		Categoria vo = new Categoria();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "SELECT nomCategoria, desCategoria, categoria_IdCategoria, admCat_idpersona " +
					" FROM categoria where idcategoria=?";
			con = ConexionMyBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCategoria);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdCategoria(idCategoria);
				vo.setNombre(rs.getString(1));
				vo.setDescripcion(rs.getString(2));
				vo.setCategoria_idcategoria(rs.getInt(3));
				vo.setAdmCat_idpersona(rs.getInt(4));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Boolean BuscarNombre(String nombre) throws DAOExcepcion {
		String query = "Select nomcategoria from categoria where nomcategoria = ?";
				
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Boolean enc = false;
		try {
			con = ConexionMyBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, nombre);
			// Buscar
			rs = stmt.executeQuery();
			if (rs.next())
				enc = true;
			else
				enc = false;

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return enc;
	}

	public Collection<Categoria> listar (int idcategoria) throws DAOExcepcion {
		String query = "Select idcategoria, nomcategoria, descategoria, " +
				"categoria_idcategoria, admcat_idpersona from categoria where categoria_idcategoria = ?";
				
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Collection<Categoria> lista = new ArrayList<Categoria>();
		Categoria vo;
		try {
			con = ConexionMyBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idcategoria);
			// Buscar
			rs = stmt.executeQuery();
			while (rs.next())
			{
				vo = new Categoria();
				vo.setIdCategoria(rs.getInt(1));
				vo.setNombre(rs.getString(2));
				vo.setDescripcion(rs.getString(3));
				vo.setCategoria_idcategoria(rs.getInt(4));
				vo.setAdmCat_idpersona(rs.getInt(5));				
				lista.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
}
